package com.cg.design.graphicdesignpattern.bridge;

/**
 * 类的实现层次结构：StringDisplayImpl， 显示字符串的类，不是直接地显示字符串，而是继承DisplayImpl类，作其子类来使用rawopen、rawprint、rawclose方法进行显示
 *
 * @program: LeetCode->StringDisplayImpl
 * @description: 类的实现层次结构：StringDisplayImpl， 显示字符串的类，不是直接地显示字符串，而是继承DisplayImpl类，作其子类来使用rawopen、rawprint、rawclose方法进行显示
 * @author: cg
 * @create: 2022-03-23 23:59
 **/
public class StringDisplayImpl extends DisplayImpl {

    /**
     * 要显示的字符串
     */
    private String string;

    /**
     * 以字节为单位计算出的字符串的宽度
     */
    private int width;

    public StringDisplayImpl(String string) {
        this.string = string;
        this.width = string.getBytes().length;
    }

    @Override
    public void rawOpen() {
        printLine();
    }

    @Override
    public void rawPrint() {
        System.out.println("|" + string + "|");
    }

    @Override
    public void rawClose() {
        printLine();
    }

    private void printLine() {
        System.out.print("+");
        for (int i = 0; i < width; i++) {
            System.out.print("-");
        }
        System.out.println("+");
    }

}
